-
Notifications
You must be signed in to change notification settings - Fork 0
코드 리뷰 Github Action 테스트를 위한 일부 코드 리팩토링 #11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
comeevery-git
commented
Oct 19, 2024
- CustomException 확장성 개선 및 핸들러 추가
- MemberService 예외 처리 일부 삭제
- CustomException 확장성 개선 및 핸들러 추가 - MemberService 예외 처리 일부 삭제
- 액션 미동작 bug fix - workflows 하위로 이동
- json parsing
Review Summary
Issue Summary
Solutions
이러한 방법으로 코드를 개선하면 전반적인 오류 처리, 유효성 검사 및 보안 측면에서 더욱 강력하고 견고한 애플리케이션이 될 것입니다. |
- 라인 별 코멘트 남기도록 수정
- java 파일만 리뷰하도록 수정 - 컨텍스트 제공(+++, --- 라인들)
최종 리뷰 요약: 각 파일 및 라인의 모든 변경 사항을 검토 완료했습니다. |
최종 리뷰 요약: .java 파일에 대한 모든 변경 사항을 검토 완료했습니다. |
최종 리뷰 요약: .java 파일에 대한 모든 변경 사항을 검토 완료했습니다. |
최종 리뷰 요약: .java 파일에 대한 모든 변경 사항을 검토 완료했습니다. |
최종 리뷰 요약: .java 파일에 대한 모든 변경 사항을 검토 완료했습니다. |
최종 리뷰 요약: .java 파일에 대한 모든 변경 사항을 검토 완료했습니다. |
최종 리뷰 요약: .java 파일에 대한 모든 변경 사항을 검토 완료했습니다. |
|
|
||
| @Getter | ||
| public class CustomException extends RuntimeException { | ||
| public class CustomException extends RuntimeException implements Serializable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Line-by-Line Review Comments
-
+import java.io.Serializable;- 코멘트:
Serializable인터페이스를 추가한 부분은 데이터 직렬화 및 역직렬화에 유용합니다. 하지만 추가적인 검토가 필요할 수 있는 부분입니다.
- 코멘트:
-
public class CustomException extends RuntimeException implements Serializable {- 코멘트:
Serializable을 구현함으로써 이 예외 클래스가 직렬화 가능하다는 점은 좋은 접근입니다. 그러나 예외가 직렬화될 때 추가적인 필드가 포함되는 경우 적절한readObject및writeObject메서드를 구현하는 것이 필요할 수 있습니다.
- 코멘트:
-
private final String additionalMessage;- 코멘트: 추가 메시지를 위한 변수를 정의한 것은 유용하지만, 이 값이
null인 경우가 있으므로 적절한 검증을 고려해야 합니다.
- 코멘트: 추가 메시지를 위한 변수를 정의한 것은 유용하지만, 이 값이
-
public CustomException(ResponseCode responseCode) {- 코멘트: 생성자에서 기본 값으로
null을 전달하는 것은 괜찮지만,responseCode가null인 경우를 체크해야 합니다.
- 코멘트: 생성자에서 기본 값으로
-
this(responseCode, null, null);- 코멘트: 이것은 문법적으로 문제가 없지만
null값이 의미하는 바에 대한 주석이 필요할 수 있습니다.
- 코멘트: 이것은 문법적으로 문제가 없지만
-
public CustomException(ResponseCode responseCode, String additionalMessage) {- 코멘트: 이 생성자는 유용합니다. 그러나
responseCode가null일 경우 예외를 발생시키는 것이 좋습니다.
- 코멘트: 이 생성자는 유용합니다. 그러나
-
public CustomException(ResponseCode responseCode, String additionalMessage, Throwable cause) {- 코멘트: 이 생성자에서 철자나 인수 검증이 필요하지 않다면, 괜찮습니다. 다만 추가 메시지가
null일 경우를 염두에 두어야 합니다.
- 코멘트: 이 생성자에서 철자나 인수 검증이 필요하지 않다면, 괜찮습니다. 다만 추가 메시지가
-
super(additionalMessage, cause);- 코멘트:
additionalMessage가null일 경우RuntimeException의 메시지에 영향을 줄 수 있으니 더 다루어야 할 필요가 있습니다.
- 코멘트:
-
@Override public String getMessage() {...}- 코멘트:
getMessage메서드의 구현은 유용하나, 여기서 추가 메시지가null일 경우를 신중하게 다루어야 합니다. 메시지가 올바르게 구성되어야만 더 깨끗한 출력이 가능합니다.
- 코멘트:
-
return (additionalMessage != null) ? responseCode.getMessage() + ": " + additionalMessage : responseCode.getMessage();- 코멘트: 이 표현식은 읽기 쉽게 잘 작성되었습니다. 그러나
additionalMessage가 비어있지 않은 경우에 대해서도 추가적인 검증이 필요할 수 있습니다. 공백 메시지를 처리하기 위한 로직이 필요할 것입니다.
- 코멘트: 이 표현식은 읽기 쉽게 잘 작성되었습니다. 그러나
Final Review Comment
[Review Summary]
전체적으로 예외 처리 클래스를 개선하는 좋은 방향으로 진행되었습니다. 그러나 다음과 같은 몇 가지 문제가 발견되었습니다.
- 사전 조건 검토: null 체크가 부족
- 런타임 오류 체크: null 값으로 인한 예외 발생 가능성
- 코딩 베스트 프랙티스: 입력 값 검증에 대한 개선 필요
[Issue Summary]
- 사전 조건 체크:
responseCode와additionalMessage에 대한 null 체크 부족 - 런타임 오류 체크: 생성자에 null 값 전달 가능성
- 코딩 베스트 프랙티스: 메시지가 비어 있거나 공백인 경우 처리 사항 미비
[Solutions]
responseCode와additionalMessage에 대해 null이 아닌지 체크하는 로직을 추가하세요.
if (responseCode == null) {
throw new IllegalArgumentException("Response code must not be null");
}getMessage메서드에서additionalMessage가 빈 문자열일 경우를 나타내는 추가 로직을 도입하여 더 명확한 반환값을 제공하는 것이 좋습니다.
return (additionalMessage != null && !additionalMessage.trim().isEmpty())
? responseCode.getMessage() + ": " + additionalMessage
: responseCode.getMessage();이러한 개선을 통해 코드의 안정성과 가독성을 높일 수 있습니다.
| package app.common.infrastructure.exception; | ||
|
|
||
| import org.slf4j.Logger; | ||
| import org.slf4j.LoggerFactory; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 로그를 추가하여 예외를 보다 효과적으로 추적할 수 있게 되었습니다. 잘 하셨습니다.
+ private static final Logger logger = LoggerFactory.getLogger(CustomExceptionHandler.class);
// 커스텀 예외 처리를 위한 로그 추가. 좋은 접근입니다.
+ logger.error("CustomException occurred: ", e);
// 잘못된 인자에 대한 예외 처리에서 구체적인 에러 메시지를 제공. 유용합니다.
+ logger.error("IllegalArgumentException occurred: ", e);
// 리소스가 발견되지 않았을 경우에 대한 에러 처리와 로그 추가. 필수입니다.
+ logger.error("NoHandlerFoundException occurred: ", e);
// 허용되지 않는 HTTP 메소드 호출에 대한 예외 처리. 명확한 응답을 제공하고 있습니다.
+ logger.error("HttpRequestMethodNotSupportedException occurred: ", e);
// 메소드 인자의 유효성 검사 실패에 대한 예외 처리. 좋은 실천입니다.
+ logger.error("MethodArgumentNotValidException occurred: ", e);
// 제약 조건 위반에 대한 예외 처리. 이 점도 잘 처리하고 있습니다.
+ logger.error("ConstraintViolationException occurred: ", e);
// 데이터 접근 예외를 처리하는 부분에서 로그 추가가 좋습니다.
+ logger.error("DataAccessException occurred: ", e);
// 접근 거부 예외에 대한 처리. 이 역시 중요한 부분입니다.
+ logger.error("AccessDeniedException occurred: ", e);
// 예상치 못한 예외 처리에서 로그를 추가하여 예외 추적이 용이해졌습니다.
+ logger.error("Unexpected exception occurred: ", e);
[Review Summary]
- 사전 조건 체크: 0
- 런타임 오류 체크: 0
- 최적화: 0
- 보안 문제: 0
- 코딩 모범 사례: 0
[Issue Summary]
- 없음
[Solutions]
- 현재 코드에서의 모든 수정 사항이 잘 되어 있으며, 예외 처리를 위한 로그 추가로 인해 코드가 더욱 효과적으로 개선되었습니다. 예외 처리에서 제공하는 응답 메시지도 직관적이고 명확하여 향후 유지보수와 디버깅에 큰 도움이 될 것입니다. 추가적으로 예외가 발생한 경우의 리턴 코드를 통해 문제를 좀 더 체계적으로 파악할 수 있도록 잘 구성되었습니다.
결과적으로, 이 코드는 예외 처리를 잘 수행하고 있으며, 추가적인 개선 사항은 필요하지 않습니다.
최종 리뷰 요약: .java 파일에 대한 모든 변경 사항을 검토 완료했습니다. |